ویژوال بیسیک
هنرستان غیردولتی نوآوران چابهار(مجتمع آموزشی نوآوران)
مجتمع آموزشی پسرانه غیردولتی نوآوران شهرستان چابهار
درباره وبلاگ


مجتمع آموزشی پسرانه غیردولتی نوآوران چابهار دردوره آمادگی و ابتدایی ومتوسطه نظری دوره اول و دوم(روزانه ) وهنرستان (شاخه کاردانش) فعالیت دارد، موسس مجتمع مهندس سیامک جهانتیغ و مدیریت مجتمع بر عهده مهندس سعید جهانتیغ (نماینده موسس) می باشد. آدرس :گلشهر بلوار علي ابن ابيطالب(ع) نبش خ خاور نلفن دبستان:35335826-054 تلفن هنرستان:35333405-054
آخرین مطالب
نويسندگان
13 / 11برچسب:, :: 9:45 :: نويسنده : کسری

 

مفاهیم بنیادی

درVB، شئ (Object) های بسیاری وجود دارد مانند فرمها، دکمه ها، برچسب ها، تصاویر و ... . همانطور که می دانیم هر شئ(Object) دارای یک سری مشخصات(Properties) می باشد. به عنوان مثال اگر یک اتومبیل را به عنوان یک شئ در نظر بگیریم، این اتومبیل دارای مشخصاتی چون رنگ خاص، وزن خاص، طول و عرض و ارتفاع خاص، میزان خاص مصرف بنزین و ... می باشد که در تمایز دو اتومبیل از هم، همین مشخصات هستند که به ما کمک می کنند. درVB نیز هر Object دارای یک تعداد مشخصه (Property) می باشد. به عنوان مثال یک دکمه(Button) دارای مشخصاتی چون عرض(Width) و ارتفاع(Height) خاص و یا یک عنوان(Caption) خاص و ... می باشد. برخی شئ(object) ها درVB، فقط در کدنویسی قابل دسترسی هستند(مانند شئADODB که در آینده با آن آشنا خواهید شد) اما برخی دیگر علاوه بر زمان کدنویسی، در زمان طراحی (Design) نیز می توان آنها را بر روی فرمها و در جای دلخواه قرار داد و آنها را تنظیم (Set) نمود. به اشیاء نوع اخیر، کنترل (Control) گفته می شود. کنترل ها خود دو گونه اند، برخی علاوه بر زمان طراحی (Design) در زمان اجرا (Run Time) نیز دیده می شوند، به این نوع کنترل در اصطلاح(Visual Control) VCL گفته می شود که بیشترین انواع کنترلها را در بر می گیرند (مانند دکمه ها، جدولها، برچسبها و بسیاری دیگر که در ادامه خواهند آمد) اما برخی دیگر از کنترل ها فقط در هنگام طراحی (Design) دیده می شوند و در هنگام اجرا تنها عمل خاصی انجام می دهند و خود دیده نمی شوند (مانند کنترلTimer)، به این نوع کنترلها،Non-Visual Control گفته می شود. باید توجه داشته باشیدکه کنترلهایNon-Visual، ذاتاً درRun Time دیده نمی شوند ولی ممکن است بنابر نیازی و در زمانی خاص از اجرا، خودمان برای یک یا چند VCL نیز مقدار مشخصه Visual آنها را برابرFalse قرار دهیم که مسلماً در این حالت با وجود اینکه در آن زمان، این کنترلها دیده نمی شوند ولی VCL بودن آنها تغییری نکرده است. کنترل ها (اعم ازVCL ها و غیر آن) معمولاً دارای تعدادی Event می باشند. Event ، رویداد یا رخدادی است که توسط کاربر و معمولاً با استفاده از ماوس یا صفحه کلید برای یک کنترل خاص روی می دهد.مثلاً یک کنترل ممکن است دارای رویداد (Event) Click باشدکه این نوع رویداد زمانی که کاربر در هنگام اجرای برنامه (Run Time) بر روی آن کنترل خاص کلیک نماید رخ می دهد.برخی Event های معمول دیگر برای کنترلها عبارتند از: DoubleClick (زمانی که بر روی آن کنترل دابل کلیک شود) ، MouseMove (زمانی که نشانگر ماوس بر روی آن کنترل قرار دارد) ، KeyPress (زمانی که کلیدی از صفحه کلید زده شد) ، KeyDown (زمانی که کلیدی از صفحه کلید پایین بود) ، KeyUp (زمانی که کلید زده شده برداشته شد) ، MouseDown ، MouseUp و ... که در ادامه با آنها بیشتر آشنا خواهیم شد. برای هر Event (رویداد) می توان یک Event Procedure داشت. Event Procedure پاسخی است که یک کنترل زمانی که یک Event رخ می دهد، از خود نشان می دهد. در واقع Event قطعه برنامه ای است که زمانی که بر روی یک کنترل، یک Event رخ می دهد، به طور اتوماتیک اجرا می شود. کنترلها معمولاً علاوه بر یک سری مشخصات (Properties) و یک سری رویداد (Event) ، دارای تعدادی نیز متد (Method) می باشد. متدها عملیاتهای تعریف شده ای هستند که توسط آنها یک عمل خاص بر روی کنترلها انجام می شود. توجه داریم که تفاوت متدها و Event Procedure ها در این است که متدها توسط VB ، شناخته شده اند و عملشان همیشه ثابت است، اما Event Procedure ها توسط برنامه نویس و به دلخواه او تهیه می شود، بنابراین Method های مشابه بر روی کنترلهای متفاوت، پاسخ مشابهی دارد ولی ممکن است Event های مشابه بر روی کنترلهای متفاوت با توجه به Event Procedure های مخصوص هر یک، متفاوت باشد (مثلاً رویداد Click برای یک کنترل، کاری انجام دهد و برای کنترلی دیگر، کاری دیگر). نکته دیگری که باید به آن توجه داشت اینست که Procedure ها به طور مستقیم اجرا نمی شوند بلکه فقط زمانی که نامشان فراخوانی شود اجرا می شوند. بنابراین مثلاً در مورد Event Procedure ها باید بدانیم که با اینکه کد مربوط به آنها نوشته شده است ولی تا وقتی که آن Event خاص (که باعث فرا خوانی Event Procedure مربوط می شود) روی ندهد، این کدها اجرا نخواهند شد


 اولین پروژه و آشنایی با برنامه نویسی به‌وسیله VB

به عنوان اولین پروژه، قصد داریم فرمی داشته باشیم با دو دکمه Message و Exit که اگر در دکمه Message کلیک شد، پیغامی نمایش داده شود و اگر دکمه Exit کلیک شد از برنامه خارج شود(شکل3):

ابتدا فرمی که بر روی صفحه نمایش باز است (فعلاً به نام Form 1 ) را به اندازه دلخواه در می آوریم و در حالی که Select است، از پنجره Properties (سمت راست تصویر) ، مشخصه (Property) های زیر را چنین Set می کنیم: 1- مشخصه Name آن را به frmFirstProject تغییر می دهیم. 2- مشخصه Caption آن را به First Project تغییر می دهیم. مشخصه Caption معمولاً عنوانها را تغییر می دهد. مثلاً در مورد فرمها، آنچه در این مشخصه Set شود در Title Bar از آن فرم دیده می شود یا در مورد دکمه ها، آنچه در این مشخصه قرار داده شود، آن چیزی است که بر روی دکمه ( به عنوان نام دکمه ای که ُکاربر می بیند) دیده می شود. مشخصه Name یکی از مهمترین مشخصه هایی است که باید برای تمام کنترلها Set شود. آنچه در این مشخصه قرار گیرد، نامی است که VB آن کنترل را به این نام می شناسد (و خصوصاً در هنگام کدنویسی و برای دسترسی به کنترلها، بسیار مورد استفاده واقع می شود). به طور پیش فرض VB برای هر کنترل یک Name در نظر می گیرد، اما در پروژه های واقعی ، معمولاً تعداد کنترلها آنقدر زیاد می شوند که نامهای پیش فرض به سختی در ذهن می ماند. برای این منظور بهتر است به کنترلها، نامهایی را نسبت دهیم که از جهتی با او متناسب باشد. لذا بهتر است اولاً در نام آنها چیزی باشد که نشان از نوع آن کنترل باشد و عبارتی نیز باشد که بیانگر موضوع یا کار فعلی آن باشد. به عنوان مثال شما می بینید که ما در مشخصه Name از form ، گفتیم که قرار دهیم: frmFirstProject که frm به خاطر تشخیص Form بودن آن است و First Project به خاطر تشخیص اینکه این فرم برای First Project است. یا مثلاً به فرض اگر بخواهیم دکمه ای به نام Exit بر روی فرمی داشته باشیم، من ترجیح می دهم که نام آن را cmdExit بگذارم که cmd را از Command Button گرفته ام. توجه داریم که این نامی است که VB آن را می شناسد وگرنه برای زیبایی کار Caption این دکمه را همان Exit می گذاریم و این نام گذاری به زیبایی پروژه ما لطمه ای وارد نمی کند. برای ادامه، دو دکمه (Command Button) بر روی فرم قرار می دهیم (که برای این منظور از پنجره Controlها که در سمت چپ تصویر است، کنترل Command Button به شکل را دابل کلیک می کنیم و یا با یک Click و انتخاب آن، بر روی فرم، به اندازه دلخواه Drag & Drop می کنیم) و جای آنها را به مکان دلخواه مورد نظر (به وسیله Drag & Drop آنها) تغییر می دهیم. آنگاه برای یکی از آنها: 1- مشخصه Name را به cmdMessage تغییر می دهیم. 2- مشخصه Caption را به Message تغییر می دهیم. و برای دیگری تغییر می دهیم: 1- مشخصه Name را به cmdExit . 2- مشخصه Caption را به Exit . که پس از این، شمای ظاهری (Interface) برنامه کامل شده است و باید به کدنویسی آن پرداخت. اگر بر روی دکمه Exit دابل کلیک کنید (البته هنوز در Design Time هستیم و نه Run Time)، Event Procedure مربوط به رویداد Click (Event) از آن را به صورت زیر باز می کند:

Private Sub cmdExit_Click ()
End Sub

که هر دستوری که در این Procedure (یعنی بین خط Private و خط End Sub) نوشته شود، در زمان اجرا، وقتی کاربر روی دکمه Exit کلیک می کند، این دستورات اجرا خواهند شد. دستوری که باید در cmdExit_Click نوشته شود بسیار ساده است:

Private Sub cmdExit_Click ()
End

End Sub

دستور End هر جایی از برنامه که اجرا شود فوراً اجرای برنامه را متوقف و از آن خارج می شود. حال اگر به ترتیبی که در بالا ذکر شد، Event Procedure مربوط به رویداد click از دکمه Message را نیز باز می کنیم و آن را به صورت زیر تغییر می دهیم:

Private Sub cmd, Message - Click

    MsgBox “The first project was done successful” و و  “Thanks”

End Sub

پروژه مورد نظر آماده شده شده است. دستور MsgBox (مخفف Message Box )باعث می شود تا یک کادر پیغام بر روی صفحه نمایش ظاهر شود و تا زمانی که دکمه OK از آن را فشار دهیم، پیغامی را نمایش دهد. در این دستور پارامتر اول، پیغام مورد نظر را به صورت string (یک داده متنی) دریافت می کند (در VB هر عبارتی که بین دو علامت " " قرار گیرد، string فرض می شود) و پارامتر سوم نیز به عنوان Message Box (که در Title Bar آن آورده خواهد شد) را به صورت متنی دریافت می کند. توجه داریم که بین هر دو پارامتر از علامت کاما (,) استفاده می کنیم و بنابراین در دستور MsgBox برنامه مان برای اینکه پس از پارامتر اول، پارامتر سوم را وارد کنیم بین آن دو پارامتر، دو بار کاما گذاشته ایم. حال برنامه تان را اجرا کنید و نتیجه کار را ببینید (اجرای برنامه در VB توسط کلید F5 صورت می گیرد.

ذکر چند نکته: 1- اگر بخواهید فشردن ALT+X همان عمل دکمه Exit را انجام دهد(ایجاد(Hot key) ، کافی است در Caption این دکمه چنین بنویسید: E&xit که در این صورت در زمان اجرا، زیر حرف x یک underline (زیر خط) می کشد که در ویندوز این حالت نشانگرHot key داشتن آن حرف است ، همین کار را هم در مورد دکمه Message انجام دهید. 2- در هنگام کدنویسی اگر چند حرف اول یک کلمه شناخته شده VB (مانند نام کنترلها و یا Property ها، Method ها و ...) را بنویسیم و CTRL+Space را فشار دهیم، اگر تنها یک کلمه با حرف اول برابر آنچه شما نوشته اید پیدا کند، بقیه حروف را خود، کامل می کند و اگر تعدادی کلمه با این مشخصات پیدا کند، لیست آنها را نمایش می دهد که می توانید یا یکی از آنها را انتخاب کنید (بر روی کلمه از لیست بروید و کلید space را بزنید) و یا تعدادی از حروف آن را بنویسید تا محدوده کلمات مشابه کوتاهتر شود. این کار را حتماً امتحان کنید! 3- زمانی که یک فرم باز می شود، به ترتیب چهار Event بر روی آن رخ می دهد:

 Initialize  

Load

Activate 

Got focus

که زمانی که رویداد اول رخ می دهد، هنوز object های روی فرم ایجاد نشده اند و قابل دسترسی نیستند. این object ها در load ساخته می شوند، اما هنوز فرم نمایش داده نشده است. وقتی فرم نمایش داده می شود، رویداد Activate و وقتیfocus به آن داده می شود، رویداد Got focus روی می دهد. (منظور از گرفتن focus اینست که آن کنترل خاص که در اینجا فرم است، کانون تمام پیامها شود، مثلاً اگر کلیدی زده شد به آن فرستاده شود و ...). 4- برای ذخیره کردن پروژه از منوی فایل و گزینه Save استفاده می شود که باید تمام فرمها، ماژولها، ... و اصل پروژه را جداگانه ذخیره کرد. لذا اگر شما برنامه First Project راsave کنید، یکبار نام فرم را save می کند (با پسوند.frm) و یکبار فایل پروژه را (با پسوند.VBP). مثالی دیگر و استفاده از Label و TextBoxها

فرض کنید بخواهیم فرمی داشته باشیم که دارای دو Text Box (که در VB برای عملیات دریافت اطلاعات از کاربر (DataEntrq) معمولاً از این کنترل استفاده می شود) برای درجه سیلسیوس و درجه فارنهایت باشد و توسط یک دکمه (و در واقع با فشردن آن توسط کاربر) مقداری که در Text box مربوط به درجه سیلسیوس نوشته شده بود را به فارنهایت تبدیل کند و نتیجه را در Text Box مربوط به آن درج نماید. (توجه: اگر Cمقدار درجه برحسب سیلسیوس و F مقدار درجه برحسب فارنهایت باشد، تبدیل سیلسیوس به فارنهایت از فرمول F=9/5 C+32 محاسبه می شود). شکل نهایی فرم را می توانید در شکل 4 ببینید.


برای این منظور، از جعبه ابزار (جعبه حاوی کنترلها) ، دو برچسب (Label) که در جعبه ابزار به شکل دیده می شود را بر روی فرم قرار می دهیم(برچسب(Label) ها در VB معمولاً زمانی استفاده می شود که بخواهیم بر روی فرم، عبارتی را به کاربر نشان دهیم که او قابلیت تغییر آن را نداشته باشد.) آنها را بوسیله Drag & Drop به مکان دلخواه منتقل می کنیم و برای یکی از آن دو: 1- مشخصه Name را به lblCelsius 2- مشخصه Caption را به Celsius و برای دیگری: 1- مشخصه Name را به lblFahrenheit 2- مشخصه Caption را به Fahrenheit تغییر می دهیم. توجه داریم که در نامگذاری Label ها با سه حرف اول lbl آغاز کرده ایم. همچنین توجه داریم که در شکل 4 ، بر روی فرم، عبارات Celsius و Fahrenheit در واقع همین دو Label هستند. نکته: برای Label هایک مشخصه (Property) دیگر به نام Auto Size وجود دارد که اگر مقدار آن را به True تغییر دهیم، اندازه (size) آن به طور اتوماتیک به اندازه متن (caption) داخل آن خواهد شد و بنابراین معمولاً بهتر است این مشخصه را نیز set کنیم. حال دو Text Box (جعبه متن) در مقابل این Label (Text Box ها در جعبه ابزار به شکل دیده می شوند، معمولاً برای نمایش و دریافت اطلاعات به طور توأم به کار می رود (بر عکس Label ها که فقط وظیفه نمایش اطلاعات را به عهده داشتند) و خصوصاً برای فرمهای DataEntrq (دریافتی اطلاعات) بسیار مناسب هستند. پروژه فعلی ما، نمونه ای کوچک از فرمهای DataEntrq است) و مناسب با هر یک از برچسب ها، برای یکی از آن دو Text Box : 1- مشخصه Name رابه txtCelsius تغییر می دهیم. 2- مشخصه Text را خالی می کنیم. و برای دیگری: 1_ مشخصه Name را به txtFahrenheit تغییر می دهیم. 3- مشخصه Text را خالی می کنیم. واضح است که در نامگذاری TextBox ها نیز از قرارداد سه حرف اول متناسب با نوع شئ، استفاده کردیم و سه حرف اول آنها را txt گذاشتیم. مشخصه Text در Textbox ها آن متنی است که داخل آن متنی است که داخل آن نوشته می شود(شبیه مشخصهCaption در Label ها) و چونقرار است کاربرما آن را وارد کند، آن را خالی (NULL) کردیم. حال یک دکمه (Command button) نیز به فرم اضافه و: 1- مشخصه Name را به cmdConvent 2- مشخصه Caption را به convent تغییر می دهیم. خوب، ظاهر (Interface) برنامه آماده شد. حال به کدنویسی برای آن می پردازیم. این اولین باری است که می خواهیم در زمان اجرا (Run Time) از مشخصه ای استفاده کنیم (مشخصه Text از txtCelsiusکه توسط کاربر وارد شده) و مشخصه ای را در این حال (Run Time) تغییر دهیم (مشخصه Text ازtxtFahrenheit که باید نتیجه را بنویسد) در VB هنگام کدنویسی برای Run Time هر زمان بخواهیم از یک Object استفاده کنیم، کافی است نام (Name) آن را بنویسیم و اگر بخواهیم به یکی از مشخصه های آن دست یابیم، کافی است پس از نام آن یک نقطه (Dot) قرار دهیم و سپس نام مشخصه (Property) مورد نظر خورد را بنویسیم. با توجه به این مطلنب، دیگر نوشتن کدهای مثال فوق کار چندان دشواری نیست. اگر بر روی دکمه Convent (البته در Design Time ) دابل کلیک نمایید، در اینصورت Procedure مربوط به رویدادِ(Event) کلیک از آن باز می شود که کافی است در آن نوشته شود: txtFahrenheit.Text = (9/5*txtCelsius.Text) + 32 یعنی Procedure باید به شکل زیر شود:

Private Sub cmdConvent_Click ()

    txtFahrenheit.Text = (9/5*txtCelsius.Text) +32

End Sub

واضح است که وقتی مشخصه Text از یک Text Box در سمت یک تساویِ جایگزینی قرار می گیرد، مقدار فعلی آن در عملیات شرکت می کند و وقتی این مشخصه در سمت چپ این جایگزین قرار می گیرد، مقادیر محاسبه شده در آن قرار می گیرد. بنابراین، Procedure فوق می گوید که وقتی بر روی دکمه Convent کلیک شد، هر مقداری که کاربر، داخل جعبه Celsius نوشته باشد را در 9/5 ضرب و با32 جمع کن و مقدار نهایی را داخل جعبه مربوط به Fahrenheit بنویس. این برنامه را حتماً بنویسید، آن را اجرا منید و با نحوه استفاده از Property ها در این کدنویسی بری Run Time آشنا شوید. در ادامه، بیشتر با این نوع استفاده از Property ها (یعنی set کردن در کدنویسی بجای set کردن در پنجره Properties از Design Time) مواجه خواهیم شد. و مهم است که این نوع استفاده را خوب درک کنیم. نکته: مشخصه Text برایText Box ها و مشخصه Caption برای Label ها، مشخصه های پیش فرض آنها محسوب می شوند و اگر نام آنها را بدون هیچ مشخصه ای بنویسیمف این مشخصه ها در نظر گرفته می شود، اذا مثلاً در Procedure بالا می توانستیم بجای txtCelsius.Text از خود txtCelsius نیز استفاده کنیم تغییری در وضعیت مثال قبل و استفاده از رویداد KeyUp فرض کنید بخواهیم مثال قبل را طوری تغییر دهیم که با نوشتن هر رقمی در txtCelsius ، بدون نیاز به فشردن کلید، نتیجه به طور خودکار در txtFahrenheit نوشته شود.مثلاً به محض اینکه عدد8 رازدیم، تبدیل شده 8 را به فارنهایت بنویسید و به محض فشردن کلید 0 (روی هم شده است80) تبدیل شده 80 را به فارنهایت بنویسد و ... ابتدا کدهای نوشته شده برای cmdconvert را پاک کنید و سپس خود کلید را نیز از روی فرم حذف کنید تا به سراغ کدنویسی برای خودText Box ها برویم. Text Box ها دارای جهار رویداد (Event) مهم می باشند: KeyDown – KeyUp – KeyPress – Change زمانی که فوکوس(تمرکز) به یک Text Box داده شود، اگر کلیدی از صفحه کلید زده شود، ابتدا رویدادKeyPress رخ می دهد ( و این به سیستم می فهماند که یک کلیدی فشرده شد) ، سپس رویداد KeyDown رخ می دهد ( و این به سیستم می فهماند که کلید زده شده، تازه زده شده است و هنوز فشرده است) و وقتی دستمان را از روی کلید برداریم، رویداد KeyUp رخ می دهد. رویداد Change نیز زمانی که هر تغییری در مقدار داخل Text box انجام شود، روی می دهد (و لذا مثلاً اگر کلیدی مثل Arrow Keys (کلیدهای حرکتی) که تغییری در مقدار داخل Text Box انجام نمی دهد زده شود، رویداد Change رخ نمی دهد.)

توجه داشته باشیم که KeyDown (وKeyUp) برای همه کلیدهای صفحه کلید رخ می دهد اما رویداد KeyPress برای برخی مثل Arrow Keys رخ نمی دهد.

Event Procedure مربوط به KeyDown و KeyUp دارای دو آرگومان (پارامتر) هستند: 1- پارامتر keycode که کد اسکی کلید فشرده شده را بر می گرداند. 2- پارامتر Shift که یکی از چهار مقدار 0 و 1 و 2 و 3 را بر می گرداند. اگر مقدار برگشتی آن یک باشد، یعنی در حال فشردن کلید زده شده، کلید Shift پایین بوده، مقدار برگشتی دو نشانگر پایین بودن کلیدAlt و مقدار برگشتی برابر سه، نشانگر پایین بودن کلید Control می باشد و صفر بودن آن، فشردن کلید بدون پایین بودن هیچ یک از این سه کلید می باشد. و Event Procedure مربوط به KeyPress تنها یک آرگومان KeyAscki دارد که کد اسکی کلید فشرده شده را برمی گرداند. با توجه به مطالب گفته شده، کافی است برای رویدادِ (Event) KeyUp از txtCelsius چنین بنویسیم:

Private Sub txtCelsius_KeyUp (KeyCode As Integer, shift As Integer)

    txtFahrenheit = (Val (txtCelsius)*9/5) + 32

End Sub



ذکر چند نکته: 1- اگر بر روی یک Text Box در Design Time دابل کلیک کنید، به طور پیش فرض، رویداد Change از آن را برای کدنویسی باز می کند. اگر می خواهیم Event Procedure رویدادهای دیگر را بیاوریم، کافی است از Combo Box منوی باز شونده عمودی کرکره ای که یک فلش رو به پایین سمت راست خود برای باز شدن منو دارد) سمت راست بالای صفحه کدنویسی، یکی از Event Procedure ها را به دلخواه انتخاب کنیم. Combo Box سمت چپ آن هم نام تمام Object های استفاده شده در آن فرم خاص را دارد که هر کدام انتخاب باشد، در Combo Box سمت راست، Procedure های آن Object خاص را لیست خواهد کرد. در شکل 5 برخی از رویدادهای مربوط به txtCelsius را می بینید.

2-  همانطور که می بینیم در Procedure فوق برای Text Box ها، نام هیچ مشخصه ای را نیاوردیم که همانطور که قبلاً توضیح داده شد، در اینصورت به طور پیش فرض، مشخصه Text برای آنها در نظر گرفته می شود.

3- تابع Val (مخفف Value) مقدار عددی یک string را برمی گرداند. از آنجا که مقدار داخل txtCelsius از نوع string 0متنی) است ولی باید بر روی آن عمل ضرب و تقسیم و جمع را انجام دهیم. ابتدا آن را توسط تابع Val، عددی نمودیم. (هر چند VB تا جای ممکن سعی می کند خودش این تبدیلات را اگر ما هم نگذاریم، انجام دهد ولی بهتر است عادت شود، برای جلوگیری از خطاهای احتمالی، شرایط هر موقعیت را فراهم آوریم.) ادامه: آخرین کاری که باید برای پروژه Second Example انجام دهیم، جلوگیری از خطای Type Miss Mach است. این خطا زمانی روی می دهد که در یک عملیات، مقادیر مناسب نباشند. مثلاً اگر بخواهیم مقدار متنی “Ali” را در مثلاً 5 ضرب کنیم، این خطا (که در VB، خطای شماره 13 است) رخ می دهد. در برنامه ما هم، اگر کاربر، در txtCelsius بجای یک عدد، حرفی را بنویسد، هنگام ضرب شدن در 9/5، همین خطا رخ خواهد داد. برای جلوگیری از بروز خطا و گرفتن کنترل خطا بدست برنامه، از تابع On Error استفاده می کنیم. اگر Procedure مربوط به رویداد Key Up از txtCelsius را به صورت زیر تغییر دهیم:

Private Sub txtCelsius–KeyUp (KeyCode As Integer, shift as Integer)

    On Error Goto xx
txtFahrenheit = (txtCelsius * 9/5) + 32
Exit Sub

xx:

    IF Err. number = 13 then
txtFahrenheit = “can’t convert “
End IF

End Sub


در اینصورت تابع On Error می گوید که وقتی به خطایی در ادامه برخوردی به خطی از Procedure که دارای برچسب xx (یک برچسب اختیاری) است برو (Goto xx) . اگر برنامه به این خط برود (یعنی وقتی خطایی رخ داد) ، بررسی می کند اگر شماره خطای رخ داده شده (Err یک Object همیشگی در VB است که مشخصه number از آن، شماره شماره خطای رخ داده را در خود نگهداری می کند) برابر B بود، بجای convert کردن، در txtFahrenheit بنویسید” can’t convert “ (امیدوارم نحوه بکارگیری دستورات شرطی (IF sentences) را بدانید). تنها نکته ای که هست اینکه اگر خطا رخ نداد و convert انجام شد، دیگر نباید به خط xx وارد شود و لذا از دستور Exit sub استفاده کردع ایم. این دستور در هر جایی از یک sub اجرا شود، بلافاصله از آن خارج می شود و دستورات دیگر را اجرا نمی کند. تغییری در وضعیت مثال قبل و استفاده از رویداد KeyUp

فرض کنید بخواهیم مثال قبل را طوری تغییر دهیم که با نوشتن هر رقمی در txtCelsius ، بدون نیاز به فشردن کلید، نتیجه به طور خودکار در txtFahrenheit نوشته شود.مثلاً به محض اینکه عدد8 رازدیم، تبدیل شده 8 را به فارنهایت بنویسید و به محض فشردن کلید 0 (روی هم شده است80) تبدیل شده 80 را به فارنهایت بنویسد و ... ابتدا کدهای نوشته شده برای cmdconvert را پاک کنید و سپس خود کلید را نیز از روی فرم حذف کنید تا به سراغ کدنویسی برای خودText Box ها برویم. Text Box ها دارای جهار رویداد (Event) مهم می باشند: KeyDown – KeyUp – KeyPress – Change زمانی که فوکوس(تمرکز) به یک Text Box داده شود، اگر کلیدی از صفحه کلید زده شود، ابتدا رویدادKeyPress رخ می دهد ( و این به سیستم می فهماند که یک کلیدی فشرده شد) ، سپس رویداد KeyDown رخ می دهد ( و این به سیستم می فهماند که کلید زده شده، تازه زده شده است و هنوز فشرده است) و وقتی دستمان را از روی کلید برداریم، رویداد KeyUp رخ می دهد. رویداد Change نیز زمانی که هر تغییری در مقدار داخل Text box انجام شود، روی می دهد (و لذا مثلاً اگر کلیدی مثل Arrow Keys (کلیدهای حرکتی) که تغییری در مقدار داخل Text Box انجام نمی دهد زده شود، رویداد Change رخ نمی دهد.)

توجه داشته باشیم که KeyDown (وKeyUp) برای همه کلیدهای صفحه کلید رخ می دهد اما رویداد KeyPress برای برخی مثل Arrow Keys رخ نمی دهد.

Event Procedure مربوط به KeyDown و KeyUp دارای دو آرگومان (پارامتر) هستند: 1- پارامتر keycode که کد اسکی کلید فشرده شده را بر می گرداند. 2- پارامتر Shift که یکی از چهار مقدار 0 و 1 و 2 و 3 را بر می گرداند. اگر مقدار برگشتی آن یک باشد، یعنی در حال فشردن کلید زده شده، کلید Shift پایین بوده، مقدار برگشتی دو نشانگر پایین بودن کلیدAlt و مقدار برگشتی برابر سه، نشانگر پایین بودن کلید Control می باشد و صفر بودن آن، فشردن کلید بدون پایین بودن هیچ یک از این سه کلید می باشد. و Event Procedure مربوط به KeyPress تنها یک آرگومان KeyAscki دارد که کد اسکی کلید فشرده شده را برمی گرداند. با توجه به مطالب گفته شده، کافی است برای رویدادِ (Event) KeyUp از txtCelsius چنین بنویسیم:

Private Sub txtCelsius_KeyUp (KeyCode As Integer, shift As Integer)

    txtFahrenheit = (Val (txtCelsius)*9/5) + 32

End Sub

ذکر چند نکته: 1- اگر بر روی یک Text Box در Design Time دابل کلیک کنید، به طور پیش فرض، رویداد Change از آن را برای کدنویسی باز می کند. اگر می خواهیم Event Procedure رویدادهای دیگر را بیاوریم، کافی است از Combo Box منوی باز شونده عمودی کرکره ای که یک فلش رو به پایین سمت راست خود برای باز شدن منو دارد) سمت راست بالای صفحه کدنویسی، یکی از Event Procedure ها را به دلخواه انتخاب کنیم. Combo Box سمت چپ آن هم نام تمام Object های استفاده شده در آن فرم خاص را دارد که هر کدام انتخاب باشد، در Combo Box سمت راست، Procedure های آن Object خاص را لیست خواهد کرد. در شکل 5 برخی از رویدادهای مربوط به txtCelsius را می بینید.

2-  همانطور که می بینیم در Procedure فوق برای Text Box ها، نام هیچ مشخصه ای را نیاوردیم که همانطور که قبلاً توضیح داده شد، در اینصورت به طور پیش فرض، مشخصه Text برای آنها در نظر گرفته می شود.

3- تابع Val (مخفف Value) مقدار عددی یک string را برمی گرداند. از آنجا که مقدار داخل txtCelsius از نوع string 0متنی) است ولی باید بر روی آن عمل ضرب و تقسیم و جمع را انجام دهیم. ابتدا آن را توسط تابع Val، عددی نمودیم. (هر چند VB تا جای ممکن سعی می کند خودش این تبدیلات را اگر ما هم نگذاریم، انجام دهد ولی بهتر است عادت شود، برای جلوگیری از خطاهای احتمالی، شرایط هر موقعیت را فراهم آوریم.) ادامه: آخرین کاری که باید برای پروژه Second Example انجام دهیم، جلوگیری از خطای Type Miss Mach است. این خطا زمانی روی می دهد که در یک عملیات، مقادیر مناسب نباشند. مثلاً اگر بخواهیم مقدار متنی “Ali” را در مثلاً 5 ضرب کنیم، این خطا (که در VB، خطای شماره 13 است) رخ می دهد. در برنامه ما هم، اگر کاربر، در txtCelsius بجای یک عدد، حرفی را بنویسد، هنگام ضرب شدن در 9/5، همین خطا رخ خواهد داد. برای جلوگیری از بروز خطا و گرفتن کنترل خطا بدست برنامه، از تابع On Error استفاده می کنیم. اگر Procedure مربوط به رویداد Key Up از txtCelsius را به صورت زیر تغییر دهیم:

Private Sub txtCelsius–KeyUp (KeyCode As Integer, shift as Integer)

    On Error Goto xx
txtFahrenheit = (txtCelsius * 9/5) + 32
Exit Sub

xx:

    IF Err. number = 13 then
txtFahrenheit = “can’t convert “
End IF

End Sub

در اینصورت تابع On Error می گوید که وقتی به خطایی در ادامه برخوردی به خطی از Procedure که دارای برچسب xx (یک برچسب اختیاری) است برو (Goto xx) . اگر برنامه به این خط برود (یعنی وقتی خطایی رخ داد) ، بررسی می کند اگر شماره خطای رخ داده شده (Err یک Object همیشگی در VB است که مشخصه number از آن، شماره شماره خطای رخ داده را در خود نگهداری می کند) برابر B بود، بجای convert کردن، در txtFahrenheit بنویسید” can’t convert “ (امیدوارم نحوه بکارگیری دستورات شرطی (IF sentences) را بدانید). تنها نکته ای که هست اینکه اگر خطا رخ نداد و convert انجام شد، دیگر نباید به خط xx وارد شود و لذا از دستور Exit sub استفاده کردع ایم. این دستور در هر جایی از یک sub اجرا شود، بلافاصله از آن خارج می شود و دستورات دیگر را اجرا نمی کند. مثالی برای رویداد KeyPress فرض کنید بر روی فرم، یک Text Box به نام txtUserName قرار داده ایم و بخواهیم کاربر، هر حرفی را داخل آن نوشت، با حرف بزرگ انگلیسی زده شود (یعنی اگر وارد کرد a، در Text Box درج شود A) در این صورت کافی است برای رویداد KeyPress از آن بنویسیم:

Private Sub txtUserName_KeyPress (KeyAscii As Integer)

    KeyAscii = ASC (Ucase (Chr (KeyAscii)))

End Sub

دستور بکار رفته در این Procedure می گوید که کد اسکی کلید فشرده شده را (توسط آرگومانِ keyAscii) دریافت کن، کاراکتر آن را (توسط تابع Chr) پیدا کن، آن کاراکتر را به حرف بزرگ تبدیل کن (توسط تابع Ucase مخفف Upper Case) و آنگاه کد اسکی حرف تبدیل یافته را (توسط تابع ASC) پیدا کن و دوباره در آرگومان keyAscii قرار بده. به این ترتیب کاربر هر کلیدی را که فشار دهد، حرف بزرگ آن در Text Box درج می شود. برخی مشخصه های Text Box ها: Name -1 : نامی که VB آن را با این نام می شناسد. Alignment -2: تراز متن داخل Text Box (راست چین، وسط چین، چپ چین) Appearance -3: با مقدار Flat و 3D که سه بعدی بودن یا تخت بودن آن را مشخص می کند. Back Color -4: رنگ زمینه Text Box Border Style -5: که تعیین می کند که text Box حاشیه داشته باشد (fixed Single) و یا خیر (None) Enable -6: این مشخصه برای هر کنترلی False باشدیعنی آن کنترل غیر فعال است (رنگ خاکستری شده کنترلها در ویندوز نمایشگر False بودن Enable آن است). Font -7: نوع فونت متن Fore Color -8: رنگ متن Height -9: ارتفاع Text Box Left -10: فاصله گوشه چپ و بالای Text Box از Container (دربرگیرنده) آن (تا به حال یک دربرگیرنده (container) را دیده ایم که فرمها می باشند. Container ها به کنترلهایی گویند که کنترلهای دیگر می توانند بر روی آن قرار گیرند مثل کنترل Frame یا کنترل Picture). Locked -11: که اگر مقدار آن True باشد، Text Box توسط کاربر، قابل ویرایش (Edit) نخواهد بود. Max Length -12: حداکثر تعداد کاراکتری که می تواند داخل Text Box قرار گیرد که اگر مقدار آن صفر باشد، محدودیت تعداد نخواهد داشت. Mouse Icon -13: آیکون ماوس وقتی روی آن قرار می گیرد (به شرطی که مشخصه بعدی یعنی Mouse Pointer بابر Custom تغییر داده شود. Mouse Pointer -14: نمایشگر ماوس وقتی روی آن است که اگر برابر Custom شود، هر چه در Mouse Icon، set شده باشد، آیکون ماوس می شود. Multi Line -15: اگر مقدار آن برابر True شود، می توان در Text Box، چند خطی نوشت و در واقع آن را شبیه یک Editor نمود. Password Char -16: گه اگر یک کاراکتر در آن قرار گیرد، هرچه داخل Text Box نوشته شود، با آن کاراکتر دیده می شود (شما در وارد کردن Password در هر ویندوز مسلماً با مقدار * برای Password برخورد داشته اید). Right To Left -17: که اگر مقدار آن True باشد، پاراگراف راست به چپ می شود (مثل آنچه ما در فارسی نوشتن به آن نیازمندیم). Scroll Bars -18: اگر مقدار Multi Line برابر True باشد، توسط مشخصه Scroll Bars می توان وجود scrollbar عمودی (vertical) ، افقی (horizontal) و یا ترکیبی از آن دو (Both) را داشت. Tab Index -19: ترتیب پرش از کنترل به کنترل دیگر هنگام زدن کلید Tab. مثلاً اگر سه Text Box بر روی فرم داشته باشیم و مقدار Tab Index آنها به ترتیب 0 و 1 و 2 بگذاریم، در هنگام اجرا، فوکوس به Text Box با مقدار Tab Index برابر صفر داده می شود که اگر کلید Tab را بزنید، فوکوس به Text Box با مقدار Tab Index ببرابر یک داده خواهد شد و الی آخر. Tab Stop -20: که اگر مقدار آن برای کنترلی False باشد، با زدن کلید Tab هیچگاه فوکوس به آن داده نخواهد شد (با Tab نمی توان روی آن رفت). Tag -21: عملاً کار خاصی انجام نمی دهد و فقط می توانیم چیزی را در آن ذخیره کنیم که بعداً خودمان از آن استفاده کنیم. Tool Tip Text -22: که مقدار آن هر چه باشد وقتی در Run Time ماوس را لحظه ای روی آن کنترل خاص نگه داریم، یک راهنمای کوتاه زرد رنگ با متن برابر مقدار تعریف شده در Tool Tip Text از آن بیرون خواهد آمد. Top -23: فاصله گوشه راست و بالای کنترل از container (دربرگیرنده) خود. Visible -24: که اگر مقدار آن False باشد، آن کنترل توسط کاربر (یعنی در Run Time) دیده نخواهد شد. Width -25: عرض کنترل توجه: 1- بسیاری از مشخصات فوق در کنترلهای دیگری غیر از Text Boxها هم با همان کاربرد، وجود دارند. 2- از مشخصاتی که در بالا آورده نشد، بزخی را در جای خود توضیح خواهیم داد. نکته: می توان برنامه را توسط کلید F8، خط به خط اجرا کرد. در این حال اگر ماوس را روی هر متغیری در پنجره کدنویسی نگه داریم، مقدار فعلی آن را به صورت Tool Tip می نویسد. از این مورد، در Debug کردن و یافتن خطاهای برنامه کمک بسیاری می توان گرفت. همچنین اگر در پنجره Immediate در هنگام Run Time دستوری را بنویسیم، این دستور بلافاصله اجرا خواهد شد. مثلاً می توانیم یک متغیر را فوراً مقدار دهی کنیم یا ... همچنین اگر بر روی هر خطی کلید F9 را بزنیم، یک Break (شکست) روی آن خط ایجاد می کند، حال اگر کلید F5 را بزنید، برنامه اجرا می شود تا به آن خطِ Break شده برسد و در آنجا متوقف می شود. که برای ادامه برنامه می توان بسته به مورد، از F5 یا F9 استفاده کرد مشخصه Causes Validation

شاید زمانی که داشتید روی مشخصات (Properties) مربوط به Text Box نظر می کردید، مشخصه causes Validation را نیز دیده باشید که ما در بخش قبل از آن نام نبردیم. این مشخصه در بسیاری از VCLها نیز وجود دارد و دارای کاربرد بسیار زیبایی است که شاید اگر وجود نداشت، برای شبیه سازی آن بوسیله کدنویسی، زمان زیادی را صرف خود می کرد. فرض کنید بر روی فرم یک Text Box به نام txtNumber وجود دارد که برای دریافت نمره یک درس دانش آموزی از کاربر، استفاده می شود. ترجیح می دهیم کاربر نتواند این فرم را save کند (نتواند به سراغ کلید cmdSave برود) مگر اینکه نمره صحیح (که در فاصله صفر تا بیست است،) را وارد نموده باشد. اما مثلاً بتواند روی دکمه cmdCancel برود و فرم را Cancel نمایدو یعنی می خواهیم اگر نمره در دامنه صحیح خود نبود روی برخی دیگر از آنها نرود. اگر برای رویدادِ(Event) Validate از txtNumber ، چنین داشته باشیم:

Private Sub txtNumber_Validate (Cancel As Boolean)
IF Val (txtNumber) > 20 then
Cancel = True
End IF

End Sub

Event Procedure فوق می گوید هر وقت که txtNumber ، Validate شد، بررسی کن که آیا نمره کمتر از 20 هست یا خیر که اگر نبود، پارامتر Cancel را True نماید. حال اگر مشخصه Causes Validation از هر کنترلی را True نماییم، در صورتی که Val(txtNumber)>20 باشد، کاربر نمی تواند، آن کنترل را فوکوس دهد. لذا اگر مشخصه مذکور را برای کلید cmd Save برابر True و برای cmdCancel برابر False تغیر دهیم، درصورت نبودن نمره در فاصله مناسب، کاربر می تواند عملیات دکمه Cancel را انجام دهد اما عملیات دکمه Save را خیر مگر اینکه دوباره Text Box مذکور را با عددی مناسب Validate نماید. توجه کنید که می توانید برای زیبایی برنامه مذکور برای رویداد Key up از txtNumber نیز چنین داشته باشیم.

Private Sub txtNumber_KeyUp (KeyCode As Integer, shift As Integer)

         IF Value (txtNumber)>20 then
txtNumber. Forecolore = VBRed
Else
txtNumber. Forecolore = VBBlack
Evd IF

End Sub

که برای نمایش اینکه با وارد نودن نمره ای به کاربر خطایی رخ داده است، رنگ متن آن را به رنگ قرمز (Red) در می آوریم و در غیر اینصورت (یعنی بدون خطا) رنگ متن را به رنگ سیاه (Black) در خواهیم آورد. ذکر چند مشخصه دیگر: 1- اگر برای یک کلید (Command Button)، مشخصه Cancel را به True قرار دهیم، در صورت زدن کلید (Escape) ESC توسط کاربر، رویداد Click از این کلید روی می دهد. 2- اگر برای یک کلید، مشخصه Default را به True تغییر دهیم، در صورت زدن کلید Enter توسط کاربر، رویداد Click از آن روی خواهد داد. 3- اگر برای یک فرم، رویداد Key Preview را به True تغییر دهیم، هر کلیدی را کاربر از صفحه کلید فشار دهد، ابتدا این کلید به رویداد KeyPress از فرم فرستاده می شود و آنگاه به رویداد Key Press از کنترلی که Focus در اختیار آن است، فرستاده می شود. تعریف متغیرها به اطمینان، قبلاً در برنامه نویسی (لااقل در Basic که پیش فرض بحث ما معرفی شده بود) از متغیرها زیاد استفاده کرده اید. در برخی زبانهای برنامه نویسی (مثل Basic) ، نوع متغیرهای بکار رفته در برنامه، لازم نیست از قبل تعریف شده باشد و در هنگام اجرا، کامپایلر، خود، آن را به نوع مورد نیاز (مثل Integer برای برای داده های عددی صحیح، یا String برای نوع داده رشته ای و کاراکتری و ...) تعریف و اجرا خواهد کرد. اما در برخی دیگر (مانند زبان برنامه نویسی Pascal)لازم است، نوع داده متغیرهای بکار رفته، در جایی از برنامه (و عموماً قبل از استفاده از آن) تعریف شوند. در VB، از آنجا که VB از Basic برای کدنویسی استفاده می شود، به طور معمول، نیاز به تعریف نوع داده ها نیست. اما از آنجا که امروزه برنامه نویسان ترجیح می دهند که از کامپایلری برای برنامه نویسی استفاده کنند که او را به تعریف تمام متغیرها مجبور کند (زیرا اگر چنین نباشد، اگر او به اشتباه دستوری را غلط تایپ کند (مثلاً بجای then بنویسد Then) ، کامپایلر آن را به عنوان متغیری فرض می کند و در واقع بدون اینکه ما خطایی را دریافت کنیم، در روند برنامه مان مشکل پیدا می شود و خطایی رخ می دهد که شاید تشخیص علت آن سخت تر شود) ، می توانیم VB را موظف سازیم تا ما را مجبور به تعریف نوع داده متغیرها نماید. اگر در ابتدای هر یونیت (Unit) عبارت Option Explicit نوشته شود، VB ما را مظف می کند که در آن یونیت، هر متغیری که بخواهیم استفاده کنیم، آن را قبل از استفاده، تعریف نماییم (لذا بهتر است ابتدای همه Unitها عبارت مذکور باشد) . یونیت (Unit) ها، بخش هایی از برنامه اند که در آنها کدنویسی می شود. مثلاً هر فرم، دارای یک Unit مخصوص به خود است که تمام Event Procedureهایی که تا بحال می نوشتیم، در آن قرار می گرفت. همچنین اگر از منوی Tools گزینه Options را اتنخاب کنیم، و از لبه General (Tab Sheet) ، گزینه Require Variable Declare را چک مارک بزنیم، از این پس، VB هر فرمی که ایجاد می شود، به طور پیش فرض عبارت Option Explicit را در ابتدای آن خواهد نوشت و در واقع همیشه ما را موظف می سازد که متغیرها را تعریف نماییم. برای تعریف متغیرها از دستور Dim به شکل کلی زیر استفاده می شود: Dim variableNames As variablsType به عنوان مثال دستور Dim a,b As Integer متغیرهایی را به نام a,b از نوع داده Integer (نوع داده عددی صحیح) تعریف می کند و سپس از آن می توانیم متغیر a را در برنامه مقداردهی نماییم. متغیرها را می توان در سه سطح تعریف نمود (Space of Variables) : 1- سطح پروسیجر (procedure Level) : اگر متغیری در یک Procedure (و معمولاً ابتدای آن) تعریف کنیم، آن متغیر را فقط در همان Procedure می توان استفاده نمود و در واقع برای همان Procedure خاص تعریف شده است. 2- سصح فرم (Form Level) :در سطح فرم (یعنی در ابتدای Unit مربوط به فرم و پس از عبارت Option Explicit) ، متغیرها می توانند به دو نوع تعریف شوند: 2-1- تعریف به صورت Private (شخصی) :

    اگر متغیری در سطح فرم به صورت Private و به شکل کلی:

Private variableNames As variableType

   تعریف شود، آن متغیر فقط در تمام Procedureهای فرم قابل استفاده است و در فرم های دیگر قابل دسترسی و استفاده نمی باشد (مگر اینکه در آنها هم جداگانه تعریف شده باشد) .

2-2- تعریف به صورت Public (عمومی) :

    اگر متغیری در سطح فرم، به صورت Public و به شکل کلی:

Public variableNames As variableType تعریف شود، در این صورت آن متغیر علاوه بر دسترسی در همان فرم (بوسیله نام آن متغیر) ، در فرمهای دیگر (در واقع در کل پروژه) قابل دسترسی خواهد بود. فقط در صورت نیاز به استفاده در فرمهای دیگر لازم است نام فرمی را که متغیر در آن تعریف شده است ذکر شود (البته اگر آن فرم load باشد) و سپس پس از یک نقطه (Dot) نام آن متغیر آورده شود. به عنوان مثال اگر در ابتدای یونیت مربوط به Form1 نوشته شده باشد: Public Number As Integer و بخواهیم در فرمی دیگر، به آن مقداردهی کنیم، لازم است چنین بنویسیم: Form1.Number = 15 توجه: اگر در سطح فرم از Dim برای تعریف استفاده شود، به طور پیش فرض آن را Private در نظر خواهد گرفت. 3- سطح ماژول (Module Level) : ماژولها بخشی از پروژه هستند که متغیرها، توابع و Procedureهای عمومی (Global) را در آن تعریف می کنیم. اگر تعریفی (مثل تعریف نوع داده متغیر یا یک Procedure) با Private انجام گیرد، فقط در همان ماژول قابل استفاده می باشد و اگر با Public صورت گیرد، در هر فرمی و بدون نیاز به نوشتن نام ماژول در ابتدای آن، قابل استفاده خواهد بود. نکته ای که باید توجه داشت اینکه اگر بخواهیم از متغیریا Procedureای که در یک ماژول به صورت Public تعریف شده است، در ماژولی دیگر استفاذه کنیم، ذکر نام ماژول در ابتدای آن به همراه یک نقطه (Dot) ضروری است. معمولاً از تعریف Public در ماژول زمانی استفاده می کنیم که بخواهیم متغیر یا Procedureای به صورت Global (عمومی) در سراسر پروژه استفاده شود. شاید بگویید می شود در هر فرمی که به آن نیاز داریم، همانجا متغیر را تعریف می کنیم، پس چه نیازی به ماژول داریم؟ هر چند این کار باعث می شود که برنامه خطای دستوری از ما نگیرد اما در اینصورت وقتی از فرمی به فرم دیگر می رویم مقدار موجود در آن متغیر، پس از تعریف مجدد، دوباره Null (تهی) می شود، در حالیکه اگر از یکبار تعریف Public در ماژول استفاده کنیم، پس از مقدار دهی در جایی از پروژه، تا مقداردهی مجدد، این مقدار در تمام پروژه قابل دسترسی است. برای افزودن یک ماژول به پروژه کافی است از منوی Project گزینه Add Module را انتخاب کنید و آن را (با پسوند .BAS) save نماییم. همانطور که ملاحظه می فرمایید، ماژولها تنها بخش کدنویسی (Unit) دارند بر خلاف فرمها که یک بخش Interface (ظاهری) داشتند که کنترلها را به صورت Visual روی آن قرار می دادیم و یک بخش کدنویسی (Unit) که کدهای مربوط به Event Procedureها را در آن می نوشتیم. همچنین ملاحظه می فرمایید که با توجه به وظیفه ماژولها، معمولاً در کل پروژه اولاً به یک ماژول نیازمندیم ثانیاً به بیش از یک ماژول احتیاجی پیدا نمی کنیم. نکته: علاوه بر متغیرها می توانیم از ثوابت (Constants) نیز در پروژه استفاده کنیم. ثوابت، بخشی از پرونده اند که هنگام تعریف، مقداردهی می شوند و تا پایان پروژه مقدارشان ثابت می ماند. برای تعریف ثوابت از دستور Constant استفاده می شود به عنوان مثال: Const PI As single = 3.14

ایجاد پروسیجر در VB، علاوه بر Event Procedureها که به ازای رویداد (Event) های مشخصی انجام می شوند، می توانیم تعدادی پروسیجر را نیز خودمان تعریف کنیم که به این نوع پروسیجر، General Procedure (پروسیجر عمومی) گفته می شود که برای اجرای آنها می بایست نام آنها در جایی از برنامه، فراخوانی شود. در VB (مشابه Basic) دو نوع پروسیجر داریم: 1- تابع (Function) 2- روال (Sub) . توابع قطعه برنامه هایی هستند که هرگاه نام آنها در برنامه فراخوانی شود، لزوماً یک و فقط یک مقدار را به عنوان خروجی برمی گرداند در حالی که روال (ساب روتین) ها، قطعه برنامه هایی هستند که ممکن است به تناسب دارای یک یا چند خروجی و یا حتی بدون خروجی باشند. توابع و روالها می توانند شامل تعدادی آرگومان (پارامتر) باشند که پارامترها در توابع فقط نقش ورود اطلاعاتی از برنامه به تابع را ایفا می کنند و نام خود تابع به عنوان خروجی تابع استفاده می شود در حالی که در روالها ورود و خروج داده ها، هر دو توسط همین پارامترها انجام می شود. شکل کلی توابع به شکل زیر است: Function functionName (Parameters) As variableType

Commands
End Function
و همچنین شکل کلی روال ها:

Sub subName (Parameters) نکاتی درباره پروسیجرها تو

پیوندهای روزانه
پيوندها


آمار وب سایت:  

بازدید امروز : 11
بازدید دیروز : 5
بازدید هفته : 11
بازدید ماه : 2326
بازدید کل : 35734
تعداد مطالب : 246
تعداد نظرات : 84
تعداد آنلاین : 2



معلمی شغل انبیاست.